﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
//需要添加以下命名空间
using UFIDA.U8.MomServiceCommon;
using UFIDA.U8.U8MOMAPIFramework;
using UFIDA.U8.U8APIFramework;
using UFIDA.U8.U8APIFramework.Meta;
using UFIDA.U8.U8APIFramework.Parameter;
using MSXML2;
using System.Runtime.InteropServices;
using ERPU8WebApi.Log;
using ERPU8WebApi.App_Start;
using ERPU8WebApi.Models;
using ERPU8WebApi.Dal;
using System.Data;
using System.IO;
using ERPU8WebApi.Until;
using System.Threading;

namespace ERPU8WebApi.Controllers
{
    /// <summary>
    /// zx20200715 库存管理
    /// </summary>
    public class InventoryManagermentController : ApiControllerBase
    {
        ParsingXML pxml = new ParsingXML();

        #region 产成品入库单
        //查询产成品入库单
        [Route("U8API/ProductIn/Load")]
        [HttpPost]
        public IHttpActionResult GetFinishedProductsWarehousingBill(dynamic m)
        {
            var log = LogFactory.GetLogger(this.GetType().ToString());
            string logMessage = "";
            try
            {
                string sWhere = m.sWhere;

                U8Login.clsLogin u8Login = U8LoginConfig.CreateInstance().u8Login;

                //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
                U8EnvContext envContext = new U8EnvContext();
                envContext.U8Login = u8Login;


                //第三步：设置API地址标识(Url)
                //当前API：装载单据的地址标识为：U8API/ProductIn/Load
                U8ApiAddress myApiAddress = new U8ApiAddress("U8API/ProductIn/Load");

                //第四步：构造APIBroker
                U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

                //第五步：API参数赋值

                //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型:10
                broker.AssignNormalValue("sVouchType", "10");

                //给普通参数sWhere赋值。此参数的数据类型为System.String，此参数按值传递，表示条件串
                broker.AssignNormalValue("sWhere", sWhere);

                //该参数domPos为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
                MSXML2.IXMLDOMDocument2 domPos = new MSXML2.DOMDocument();
                broker.AssignNormalValue("domPos", domPos);

                //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

                //给普通参数bGetBlank赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否获取空白单据:传入false
                broker.AssignNormalValue("bGetBlank", new System.Boolean());

                //给普通参数sBodyWhere_Order赋值。此参数的数据类型为System.String，此参数按值传递，表示表体排序方式字段
                broker.AssignNormalValue("sBodyWhere_Order", "");

                //第六步：调用API
                if (!broker.Invoke())
                {
                    //错误处理
                    Exception apiEx = broker.GetException();
                    if (apiEx != null)
                    {
                        if (apiEx is MomSysException)
                        {
                            MomSysException sysEx = apiEx as MomSysException;
                            logMessage = "MomSysException异常：" + sysEx.Message;
                            //todo:异常处理
                        }
                        else if (apiEx is MomBizException)
                        {
                            MomBizException bizEx = apiEx as MomBizException;
                            logMessage = "API异常：" + bizEx.Message;

                            //todo:异常处理
                        }
                        //异常原因
                        String exReason = broker.GetExceptionString();
                        if (exReason.Length != 0)
                        {
                            logMessage = "异常原因：" + exReason;
                        }
                    }
                    //结束本次调用，释放API资源
                    broker.Release();
                    return IHttpError(Models.ResponseCode.OtherError, logMessage);
                }

                //第七步：获取返回结果

                //获取返回值
                //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
                System.Boolean result = Convert.ToBoolean(broker.GetReturnValue());
                System.String errMsgRet = broker.GetResult("errMsg") as System.String;

                if (result == true)
                {
                    try
                    {
                        MSXML2.DOMDocument DocHeadRet = broker.GetResult("DomHead") as MSXML2.DOMDocument;
                        MSXML2.DOMDocument DocBodyRet = broker.GetResult("domBody") as MSXML2.DOMDocument;
                        
                        string xmlHead = DocHeadRet.xml.ToString();
                        string xmlBody = DocBodyRet.xml.ToString();
                        
                        FinishedProductsWarehousingBill ood = new FinishedProductsWarehousingBill();
                        ood = (FinishedProductsWarehousingBill)pxml.CreatOrderModel(xmlHead, xmlBody, new FinishedProductsWarehousingController());
                        //ood.xmlHead = xmlHead;
                        //ood.xmlBody = xmlBody;

                        //结束本次调用，释放API资源
                        broker.Release();
                        logMessage = "查询产成品入库单成功";
                        return IHttpSuccess(ood);
                    }
                    catch (Exception e)
                    {
                        broker.Release();
                        logMessage = e.Message;
                        return IHttpError(Models.ResponseCode.PARAMETERERROR, logMessage+"查询参数有误");
                    }
                }
                else
                {
                    string errorMsg = "查询产成品入库单失败";
                    if (errMsgRet != null)
                    {
                        errorMsg += " 失败原因：" + errMsgRet;
                    }
                    logMessage = errorMsg;
                    broker.Release();
                    return IHttpError(Models.ResponseCode.PARAMETERERROR, errorMsg);
                }
            }
            catch (Exception ex)
            {
                logMessage = ex.ToString();
                return IHttpError(Models.ResponseCode.APIERROR, logMessage);
            }
            finally
            {
                string strMessage = log.ExeFormat(logMessage);
                log.Info(strMessage);
            }
        }

        //新增产成品入库单
        [Route("U8API/ProductIn/Add")]
        [HttpPost]
        public IHttpActionResult AddFinishedProductsWarehousingBill(FinishedProductsWarehousingBill m)
        {
            var log = LogFactory.GetLogger(this.GetType().ToString());
            string logMessage = "";
            bool bCheck = true;// m.bCheck;
            bool bBeforCheckStock = true;// m.bBeforCheckStock;
            bool bIsRedVouch = false;// m.bIsRedVouch;
            try
            {

                U8Login.clsLogin u8Login = U8LoginConfig.CreateInstance().u8Login;
                //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
                U8EnvContext envContext = new U8EnvContext();
                envContext.U8Login = u8Login;

                //第三步：设置API地址标识(Url)
                //当前API：添加新单据的地址标识为：U8API/ProductIn/Add
                U8ApiAddress myApiAddress = new U8ApiAddress("U8API/ProductIn/Add");

                //第四步：构造APIBroker
                U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

                //第五步：API参数赋值

                //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型：10
                broker.AssignNormalValue("sVouchType", "10");

                //FinishedProductsWarehousingController sooc = new FinishedProductsWarehousingController();
                //string xmlHead = sooc.ReturnXmlHead(m.head);
                //string xmlBody = sooc.ReturnXmlBody(m.body);

                BaseOrderModelController sooc = new BaseOrderModelController();
                string xmlHead = sooc.ReturnXmlHead(m.head, "产成品入库单");
                string xmlBody = sooc.ReturnXmlBody(pxml.PraseList<BaseOrderModelClass>(m.body), "产成品入库单");

                MSXML2.DOMDocumentClass DomHead = new DOMDocumentClass();
                DomHead.loadXML(xmlHead);
                broker.AssignNormalValue("DomHead", DomHead);

                MSXML2.DOMDocumentClass dombody = new DOMDocumentClass();
                dombody.loadXML(xmlBody);
                broker.AssignNormalValue("domBody", dombody);

                //给普通参数domPosition赋值。此参数的数据类型为System.Object，此参数按引用传递，表示货位：传空
                broker.AssignNormalValue("domPosition", null);

                //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

                //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection，此参数按引用传递，表示连接对象,如果由调用方控制事务，则需要设置此连接对象，否则传空
                broker.AssignNormalValue("cnnFrom", null);

                //该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String，此参数按值传递。在API调用返回时，可以通过GetResult("VouchId")获取其值
                broker.AssignNormalValue("VouchId", "");

                //该参数domMsg为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
                MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
                broker.AssignNormalValue("domMsg", domMsg);

                //给普通参数bCheck赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否控制可用量。
                broker.AssignNormalValue("bCheck", bCheck);

                //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示检查可用量
                broker.AssignNormalValue("bBeforCheckStock", bBeforCheckStock);

                //给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否红字单据
                broker.AssignNormalValue("bIsRedVouch", bIsRedVouch);

                //给普通参数sAddedState赋值。此参数的数据类型为System.String，此参数按值传递，表示传空字符串
                broker.AssignNormalValue("sAddedState", "");

                //给普通参数bReMote赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否远程：转入false
                broker.AssignNormalValue("bReMote", false);

                //第六步：调用API
                if (!broker.Invoke())
                {
                    //错误处理
                    Exception apiEx = broker.GetException();
                    if (apiEx != null)
                    {
                        if (apiEx is MomSysException)
                        {
                            MomSysException sysEx = apiEx as MomSysException;
                            logMessage = "系统异常：" + sysEx.Message;
                            return IHttpError(Models.ResponseCode.OtherError, "系统异常：" + sysEx.Message);
                        }
                        else if (apiEx is MomBizException)
                        {
                            MomBizException bizEx = apiEx as MomBizException;
                            logMessage = "API异常：" + bizEx.Message;
                            return IHttpError(Models.ResponseCode.OtherError, "API异常：" + bizEx.Message);
                        }
                        //异常原因
                        String exReason = broker.GetExceptionString();
                        if (exReason.Length != 0)
                        {
                            logMessage = "异常原因：" + exReason;
                            return IHttpError(Models.ResponseCode.OtherError, "异常原因：" + exReason);
                        }
                    }
                    //结束本次调用，释放API资源
                    broker.Release();
                    logMessage = "新增产成品入库单失败";
                    return IHttpError(Models.ResponseCode.OtherError, "新增产成品入库单失败");
                }

                //第七步：获取返回结果

                //获取返回值
                //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
                System.Boolean result = Convert.ToBoolean(broker.GetReturnValue());

                //获取out/inout参数值

                //获取普通OUT参数errMsg。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
                System.String errMsgRet = broker.GetResult("errMsg") as System.String;

                //获取普通INOUT参数VouchId。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
                System.String VouchIdRet = broker.GetResult("VouchId") as System.String;

                //获取普通OUT参数domMsg。此返回值数据类型为MSXML2.IXMLDOMDocument2，在使用该参数之前，请判断是否为空
                //MSXML2.IXMLDOMDocument2 domMsgRet = Convert.ToObject(broker.GetResult("domMsg"));

                string results = "";
                if (result == true)
                {
                    if (VouchIdRet != null)
                    {
                        results += result + " VouchId:" + VouchIdRet;
                    }
                }
                else
                {
                    results += result;
                }
                if (errMsgRet != null)
                {
                    results += errMsgRet.ToString();
                }

                //结束本次调用，释放API资源
                broker.Release();
                logMessage = results;
                return IHttpSuccess(logMessage);
            }
            catch (Exception ex)
            {
                logMessage = ex.ToString();
                return IHttpError(Models.ResponseCode.OtherError, ex.ToString());
            }

            finally
            {
                string strMessage = log.ExeFormat(logMessage);
                log.Info(strMessage);
            }
        }

        //修改产成品入库单
        [Route("U8API/ProductIn/Update")]
        [HttpPost]
        public IHttpActionResult UpdateFinishedProductsWarehousingBill(FinishedProductsWarehousingBill m)
        {
            var log = LogFactory.GetLogger(this.GetType().ToString());
            string logMessage = "";
            bool bCheck = true;// m.bCheck;
            bool bBeforCheckStock = true;// m.bBeforCheckStock;
            bool bIsRedVouch = false;// m.bIsRedVouch;
            try
            {

                U8Login.clsLogin u8Login = U8LoginConfig.CreateInstance().u8Login;
                //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
                U8EnvContext envContext = new U8EnvContext();
                //u8Login.set_TaskId("1");
                envContext.U8Login = u8Login;

                //第三步：设置API地址标识(Url)
                //当前API：添加新单据的地址标识为：U8API/ProductIn/Add
                U8ApiAddress myApiAddress = new U8ApiAddress("U8API/ProductIn/Update");

                //第四步：构造APIBroker
                U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

                //第五步：API参数赋值

                //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型：10
                broker.AssignNormalValue("sVouchType", "10");

                BaseOrderModelController sooc = new BaseOrderModelController();
                string xmlHead = sooc.ReturnXmlHead(m.head, "产成品入库单");
                string xmlBody = sooc.ReturnXmlBody(pxml.PraseList<BaseOrderModelClass>(m.body), "产成品入库单");


                MSXML2.DOMDocumentClass DomHead = new DOMDocumentClass();
                DomHead.loadXML(xmlHead);
                broker.AssignNormalValue("DomHead", DomHead);

                MSXML2.DOMDocumentClass dombody = new DOMDocumentClass();
                dombody.loadXML(xmlBody);
                broker.AssignNormalValue("domBody", dombody);


                //给普通参数domPosition赋值。此参数的数据类型为System.Object，此参数按引用传递，表示货位：传空
                broker.AssignNormalValue("domPosition", null);

                //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

                //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection，此参数按引用传递，表示连接对象,如果由调用方控制事务，则需要设置此连接对象，否则传空
                broker.AssignNormalValue("cnnFrom", null);

                //该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String，此参数按值传递。在API调用返回时，可以通过GetResult("VouchId")获取其值
                //broker.AssignNormalValue("VouchId", "");

                //该参数domMsg为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
                MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
                broker.AssignNormalValue("domMsg", domMsg);

                //给普通参数bCheck赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否控制可用量。
                broker.AssignNormalValue("bCheck", bCheck);

                //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示检查可用量
                broker.AssignNormalValue("bBeforCheckStock", bBeforCheckStock);

                //给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否红字单据
                broker.AssignNormalValue("bIsRedVouch", bIsRedVouch);

                //给普通参数sAddedState赋值。此参数的数据类型为System.String，此参数按值传递，表示传空字符串
                broker.AssignNormalValue("sAddedState", "");

                //给普通参数bUpdateNeedEas赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示传true
                broker.AssignNormalValue("bUpdateNeedEas", true);

                //第六步：调用API
                if (!broker.Invoke())
                {
                    //错误处理
                    Exception apiEx = broker.GetException();
                    if (apiEx != null)
                    {
                        if (apiEx is MomSysException)
                        {
                            MomSysException sysEx = apiEx as MomSysException;
                            logMessage = "系统异常：" + sysEx.Message;
                            return IHttpError(Models.ResponseCode.OtherError, "系统异常：" + sysEx.Message);
                        }
                        else if (apiEx is MomBizException)
                        {
                            MomBizException bizEx = apiEx as MomBizException;
                            logMessage = "API异常：" + bizEx.Message;
                            return IHttpError(Models.ResponseCode.OtherError, "API异常：" + bizEx.Message);
                        }
                        //异常原因
                        String exReason = broker.GetExceptionString();
                        if (exReason.Length != 0)
                        {
                            logMessage = "异常原因：" + exReason;
                            return IHttpError(Models.ResponseCode.OtherError, "异常原因：" + exReason);
                        }
                    }
                    //结束本次调用，释放API资源
                    broker.Release();
                    logMessage = "修改产成品入库单失败";
                    return IHttpError(Models.ResponseCode.OtherError, "修改产成品入库单失败");
                }

                //第七步：获取返回结果

                //获取返回值
                //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
                System.Boolean result = Convert.ToBoolean(broker.GetReturnValue());

                //获取out/inout参数值

                //获取普通OUT参数errMsg。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
                System.String errMsgRet = broker.GetResult("errMsg") as System.String;


                //获取普通OUT参数domMsg。此返回值数据类型为MSXML2.IXMLDOMDocument2，在使用该参数之前，请判断是否为空
                //MSXML2.IXMLDOMDocument2 domMsgRet = Convert.ToObject(broker.GetResult("domMsg"));

                string results = "";
                if (result != null)
                {
                    results += result + "---";
                }
                if (errMsgRet != null)
                {
                    results += errMsgRet.ToString();
                }

                //结束本次调用，释放API资源
                broker.Release();
                logMessage = results;
                return IHttpSuccess(logMessage);
            }
            catch (Exception ex)
            {
                logMessage = ex.ToString();
                return IHttpError(Models.ResponseCode.OtherError, ex.ToString());
            }

            finally
            {
                string strMessage = log.ExeFormat(logMessage);
                log.Info(strMessage);
            }
        }

        //审核
        [Route("U8API/ProductIn/Audit")]
        [HttpPost]
        public IHttpActionResult AuditFinishedProductsWarehousingBill(dynamic m)
        {
            var log = LogFactory.GetLogger(this.GetType().ToString());
            string logMessage = "";
            try
            {
                //传入的是主表id
                string VouchId = m.VouchId;
                bool bCheck = m.bCheck;
                bool bBeforCheckStock = m.bBeforCheckStock;
                bool bList = m.bList;

                U8Login.clsLogin u8Login = U8LoginConfig.CreateInstance().u8Login;
                //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
                U8EnvContext envContext = new U8EnvContext();
                envContext.U8Login = u8Login;


                //第三步：设置API地址标识(Url)
                //当前API：装载单据的地址标识为：U8API/ProductIn/Load
                U8ApiAddress myApiAddress = new U8ApiAddress("U8API/ProductIn/Audit");

                //第四步：构造APIBroker
                U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

                //第五步：API参数赋值

                //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型:10
                broker.AssignNormalValue("sVouchType", "10");

                //给普通参数sWhere赋值。此参数的数据类型为System.String，此参数按值传递，表示单据id
                broker.AssignNormalValue("VouchId", VouchId);

                //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

                //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection，此参数按引用传递，表示连接对象：调用方控制事务时需要传入连接对象
                broker.AssignNormalValue("cnnFrom", null);

                //给普通参数TimeStamp赋值。此参数的数据类型为System.Object，此参数按值传递，表示单据时间戳，用于检查单据是否修改，空串时不检查
                broker.AssignNormalValue("TimeStamp", "");

                //该参数domMsg为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
                MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
                broker.AssignNormalValue("domMsg", domMsg);

                //给普通参数bCheck赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否控制可用量
                broker.AssignNormalValue("bCheck", bCheck);

                //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示检查可用量
                broker.AssignNormalValue("bBeforCheckStock", bBeforCheckStock);

                //给普通参数bList赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示传入空串
                broker.AssignNormalValue("bList", bList);

                //给普通参数MakeWheres赋值。此参数的数据类型为VBA.Collection，此参数按值传递，表示传空
                broker.AssignNormalValue("MakeWheres", null);

                //给普通参数sWebXml赋值。此参数的数据类型为System.String，此参数按值传递，表示传入空串
                broker.AssignNormalValue("sWebXml", "");

                //给普通参数oGenVouchIds赋值。此参数的数据类型为Scripting.IDictionary，此参数按值传递，表示返回审核时自动生成的单据的id列表,传空
                broker.AssignNormalValue("oGenVouchIds", null);


                //第六步：调用API
                if (!broker.Invoke())
                {
                    //错误处理
                    Exception apiEx = broker.GetException();
                    if (apiEx != null)
                    {
                        if (apiEx is MomSysException)
                        {
                            MomSysException sysEx = apiEx as MomSysException;
                            logMessage = "MomSysException异常：" + sysEx.Message;
                            //todo:异常处理
                        }
                        else if (apiEx is MomBizException)
                        {
                            MomBizException bizEx = apiEx as MomBizException;
                            logMessage = "API异常：" + bizEx.Message;

                            //todo:异常处理
                        }
                        //异常原因
                        String exReason = broker.GetExceptionString();
                        if (exReason.Length != 0)
                        {
                            logMessage = "异常原因：" + exReason;
                        }
                    }
                    //结束本次调用，释放API资源
                    broker.Release();
                    return IHttpError(Models.ResponseCode.OtherError, "");
                }

                //第七步：获取返回结果

                //获取返回值
                //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
                System.Boolean result = Convert.ToBoolean(broker.GetReturnValue());
                System.String errMsgRet = broker.GetResult("errMsg") as System.String;

                //获取普通OUT参数domMsg。此返回值数据类型为MSXML2.IXMLDOMDocument2，在使用该参数之前，请判断是否为空
                //MSXML2.IXMLDOMDocument2 domMsgRet = Convert.ToObject(broker.GetResult("domMsg"));

                string results = "";
                if (result != null)
                {
                    results += result + "---";
                }
                if (errMsgRet != null)
                {
                    results += errMsgRet.ToString();
                }

                //结束本次调用，释放API资源
                broker.Release();
                logMessage = results;
                return IHttpSuccess(logMessage);
            }
            catch (Exception ex)
            {
                logMessage = ex.ToString();
                return IHttpError(Models.ResponseCode.OtherError, ex.ToString());
            }
            finally
            {
                string strMessage = log.ExeFormat(logMessage);
                log.Info(strMessage);
            }
        }
        #endregion


        #region test

        //测试连接
        [Route("api/InventoryManagerment/TestU8Api")]
        [HttpPost]
        public IHttpActionResult TestU8Api(dynamic m)
        {
            //物料id
            int partid = m.partid;
            //BOM类型
            int bomtype = m.bomtype;
            //主版本或替代标识
            string versionoridencode = m.versionoridencode;

            var log = LogFactory.GetLogger(this.GetType().ToString());
            string logMessage = "";
            try
            {
                //第一步：构造u8login对象并登陆(引用U8API类库中的Interop.U8Login.dll)
                //如果当前环境中有login对象则可以省去第一步
                //
                U8Login.clsLogin u8Login = new U8Login.clsLogin();
                String sSubId = "AS";
                String sAccID = "013";
                String sYear = "2021";
                String sUserID = "7777";
                String sPassword = "";
                String sDate = "2021-03-01";
                String sServer = "127.0.0.1";
                String sSerial = "";
                if (!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial))
                {
                    Console.WriteLine("登陆失败，原因：" + u8Login.ShareString);
                    logMessage = "测试接失败" + u8Login.ShareString;
                    Marshal.FinalReleaseComObject(u8Login);
                }
                else
                {
                    logMessage = "测试接口成功1" + partid + bomtype + versionoridencode;
                }
                return IHttpSuccess(logMessage);
            }
            catch (Exception ex)
            {
                logMessage = ex.ToString();
                return IHttpError(Models.ResponseCode.OtherError, ex.ToString());
            }

            finally
            {
                string strMessage = log.ExeFormat(logMessage);
                log.Info(strMessage);
            }
        }
        #endregion
    }
}
